<template>
  <div>
    <el-form :model="reporter" ref="reporter">
      <el-form-item label="标题">
        <el-input v-model="reporter.title"></el-input>
        <i class="el-icon-info" @click="visible1 = !visible1" />
        <el-collapse-transition>
          <p v-show="visible1">
            “标题”是现场调查报告内容的高度概括，必须简明扼要地向读者展示所做工作的主要成果。标题应该简练、准确，可包括时间、地点及主要调查内容等要素，有时可省略时间、地点相关信息，可根据具体情况而定。
            一般标题的表达形式：<strong>“关于+地点+事件名+的调查报告”</strong>。但根据工作内容的不同，标题常常有所变化，如“关于XXXX的调查报告”、“关于XXXX的评价报告”、“XXXX调查”等。
          </p>
        </el-collapse-transition>
      </el-form-item>
      <el-form-item label="1.前言（事件经过)" porp="preface">
        <el-input type="textarea" v-model="reporter.preface"></el-input>
        <i class="el-icon-info" @click="visible2 = !visible2" />
        <el-collapse-transition>
          <p v-show="visible2">
            “前言”部分主要对事件的发现、报告、调查经过进行简单概括。一般篇幅不宜太长，200-500字即可。“前言”部分可包括以下内容：
            1．本次现场调查的由来与背景、目的和意义，引出调查所要探讨和解决的问题。
            2．简述发现事件的信息来源，包括接报及上报情况等。
            2．交待事件发生经过，以及调查工作的任务来源（如下级请求或上级要求等）。
            3．简述现场工作经过，包括调查的地点和时间、参加单位与人员、调查方法、调查工作经过、调查处理结论等。
          </p>
        </el-collapse-transition>
      </el-form-item>

      <el-form-item label="2.基本情况" porp="situation">
        <el-input
          type="textarea"
          v-model="reporter.situation"
          :rows="5"
        ></el-input>
        <i class="el-icon-info" @click="visible3 = !visible3" />
        <el-collapse-transition>
          <p v-show="visible3">
            “基本情况”是对事件发生地的背景信息进行描述；此部分所包含的内容，应可对调查和分析结论起到支持作用，应避免提供与主体内容毫无关联的信息。一般来说，基本情况可包括如下内容：<strong>事件发生地的地理位置、环境、气候条件、人口构成状况、社会经济状况、卫生服务机构、平时疾病流行情况或历史上该疾病在该地区流行状况、该地区有关的预防接种情况等</strong>。应重点说明与事件性质和原因有关的本底情况，如虫媒传染病应说明媒介种群、密度与变化情况，肠道传染病重点说明当地卫生状况，等。
          </p>
        </el-collapse-transition>
      </el-form-item>
      <el-form-item label="3.核实诊断" porp="diagnosis">
        <el-input
          type="textarea"
          v-model="reporter.diagnosis"
          :rows="10"
        ></el-input>
        <i class="el-icon-info" @click="visible4 = !visible4" />
        <el-collapse-transition>
          <div v-show="visible4">
            针对传染病群体性事件的调查，首先要对疾病进行核实诊断，证实暴发或流行的存在。因此，该部分主要对疾病的临床信息进行汇总、分析并展示。主要内容：
            <p>1．临床表现：描述病人的临床症状和体征、临床上的分型及其特点。</p>
            <p>
              2．辅助检查：各种临床辅助检查的结果。根据调查的病种，展示的辅助检查结果应各有侧重，如呼吸道传染病（如SARS）可重点展示肺部X线检查及肺部通气指标，胃肠道传染病应重点展示大便标本检查结果等。
            </p>
            <p>
              3．主要诊断依据：一般参考各法定传染病的国家诊断标准。如果疾病无公认的诊断标准（如新发传染病和不明原因的疾病），应列出病例定义和分级定义。
            </p>
            如果是新发传染病，则临床资料的统计分析应为调查工作重点，以便弄清疾病的特征，为诊断、治疗及防控工作提供参考资料。
          </div>
        </el-collapse-transition>
      </el-form-item>
      <el-form-item label="4.临床特征分析" porp="clif">
        <el-input type="textarea" :rows="5" v-model="reporter.clif"></el-input>
        <!-- <i class="el-icon-info" @click="visible4 = !visible4" />
        <el-collapse-transition>
          <div v-show="visible4">
            针对传染病群体性事件的调查，首先要对疾病进行核实诊断，证实暴发或流行的存在。因此，该部分主要对疾病的临床信息进行汇总、分析并展示。主要内容：
            <p>1．临床表现：描述病人的临床症状和体征、临床上的分型及其特点。</p>
            <p>
              2．辅助检查：各种临床辅助检查的结果。根据调查的病种，展示的辅助检查结果应各有侧重，如呼吸道传染病（如SARS）可重点展示肺部X线检查及肺部通气指标，胃肠道传染病应重点展示大便标本检查结果等。
            </p>
            <p>
              3．主要诊断依据：一般参考各法定传染病的国家诊断标准。如果疾病无公认的诊断标准（如新发传染病和不明原因的疾病），应列出病例定义和分级定义。
            </p>
            如果是新发传染病，则临床资料的统计分析应为调查工作重点，以便弄清疾病的特征，为诊断、治疗及防控工作提供参考资料。
          </div>
        </el-collapse-transition> -->
      </el-form-item>
      <el-form-item
        label="5.流行病学分析（描述流行病学、轨迹分析、传播链分析、分析流行病学）"
        porp="analysis"
      >
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.analysis"
        ></el-input>
        <!-- <i class="el-icon-info" @click="visible4 = !visible4" />
        <el-collapse-transition>
          <div v-show="visible4">
            针对传染病群体性事件的调查，首先要对疾病进行核实诊断，证实暴发或流行的存在。因此，该部分主要对疾病的临床信息进行汇总、分析并展示。主要内容：
            <p>1．临床表现：描述病人的临床症状和体征、临床上的分型及其特点。</p>
            <p>
              2．辅助检查：各种临床辅助检查的结果。根据调查的病种，展示的辅助检查结果应各有侧重，如呼吸道传染病（如SARS）可重点展示肺部X线检查及肺部通气指标，胃肠道传染病应重点展示大便标本检查结果等。
            </p>
            <p>
              3．主要诊断依据：一般参考各法定传染病的国家诊断标准。如果疾病无公认的诊断标准（如新发传染病和不明原因的疾病），应列出病例定义和分级定义。
            </p>
            如果是新发传染病，则临床资料的统计分析应为调查工作重点，以便弄清疾病的特征，为诊断、治疗及防控工作提供参考资料。
          </div>
        </el-collapse-transition> -->
      </el-form-item>
      <el-form-item label="6.实验室检测" porp="experiment">
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.experiment"
        ></el-input>
        <!-- <i class="el-icon-info" @click="visible4 = !visible4" />
        <el-collapse-transition>
          <div v-show="visible4">
            针对传染病群体性事件的调查，首先要对疾病进行核实诊断，证实暴发或流行的存在。因此，该部分主要对疾病的临床信息进行汇总、分析并展示。主要内容：
            <p>1．临床表现：描述病人的临床症状和体征、临床上的分型及其特点。</p>
            <p>
              2．辅助检查：各种临床辅助检查的结果。根据调查的病种，展示的辅助检查结果应各有侧重，如呼吸道传染病（如SARS）可重点展示肺部X线检查及肺部通气指标，胃肠道传染病应重点展示大便标本检查结果等。
            </p>
            <p>
              3．主要诊断依据：一般参考各法定传染病的国家诊断标准。如果疾病无公认的诊断标准（如新发传染病和不明原因的疾病），应列出病例定义和分级定义。
            </p>
            如果是新发传染病，则临床资料的统计分析应为调查工作重点，以便弄清疾病的特征，为诊断、治疗及防控工作提供参考资料。
          </div>
        </el-collapse-transition> -->
      </el-form-item>
      <el-form-item label="7.调查结论" porp="conclusion">
        <br />
        7.1 病因分析：
        <br />
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.conclusion1"
        ></el-input>
        7.2 感染来源分析：
        <br />
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.conclusion2"
        ></el-input>
        7.3 传染性分析：
        <br />
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.conclusion3"
        ></el-input>
        <i class="el-icon-info" @click="visible5 = !visible5" />
        <el-collapse-transition>
          <div v-show="visible5">
            并非每一项调查均可以做分析流行病学的总结。如果调查设计与信息资料足以支持这一部分的分析，则该部分将是调查报告中最重要的内容。主要内容包括：
            1．提出病因或流行因素假设：综合临床信息、流行病学特征等内容，提出病因或流行因素的假设。与前面的描述性内容无关、缺乏依据的假设，是不科学合理的假设，只能使人对本次调查的结论提出怀疑。
            2．验证假设：根据分析流行病学调查结果（病例对照研究和队列研究），以及关联强度、剂量-反应关系等指标，对病因假设进行验证。
            3．传染来源与相关因素调查结果的分析结论。除了流行病学方法的应用以外，逻辑推理思维也必不可少。
            4．标本采集和实验室检测：病原学、免疫学检测结果，是确定病因的强有力的支持资料。
            5．干预效应：如落实了干预措施，则干预效应可为病因推断提供进一步的支持。
            6．病因判断：病因判断的结论；支持本病因结论的理由；排除其它可能原因的理由，等等。
          </div>
        </el-collapse-transition>
      </el-form-item>
      <el-form-item label="8.已采取的防控措施" porp="measures">
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.measures"
        ></el-input>
        <i class="el-icon-info" @click="visible6 = !visible6" />
        <el-collapse-transition>
          <div v-show="visible6">
            流行病学调查、查因，是为了控制疾病而服务的；控制（干预）措施的落实，应与流行病学调查同时开展。因此，完整的现场流行病学调查报告，应包括防制措施与效果评价内容。要求如下：
            1．描述各种技术措施的落实情况，包括采取措施的时间、范围和对象等。
            2．选择过程性指标进行描述，如疫苗接种率、传染源的隔离率等。
            3．防制措施实施后，应对其防控效果作出评价，同时也是验证调查分析是否正确。如果效果不佳或发生续发病例，应说明原因，分析指出需要修正的控制措施。
            4．已采取防制措施和即将采取防制措施分开描述。
          </div>
        </el-collapse-transition>
      </el-form-item>
      <el-form-item label="9.下一步的建议" porp="problem">
        <el-input
          type="textarea"
          :rows="5"
          v-model="reporter.problem"
        ></el-input>
        <i class="el-icon-info" @click="visible7 = !visible7" />
        <el-collapse-transition>
          <div v-show="visible7">
            发现问题、总结经验与教训，是提升调查工作意义的必需步骤。同时应提出针对性的工作建议，旨在减少今后类似事件的发生，或为今后类似事件的调查提供指导意见。要求如下：
            1．存在问题及教训：对调查过程中发现的卫生工作中存在问题进行阐述；对处理不当或效果有限的措施以及存在的问题进行分析。
            2．总结经验：对疫情处理过程中所采取的成功或关键措施进行介绍。
            3．提出建议：综合调查结果、流行因素分析及控制实践经验等内容，分析预测事件可能发展趋势，提出下一步工作建议。包括开展进一步调查研究、尚需采取的对策方法等建议，以及预防今后类似事件再次发生的建议。建议要符合客观实际情况，具有较强的可操作性和可行性。
          </div>
        </el-collapse-transition>
      </el-form-item>
      <el-form-item label="10.落款" porp="summary">
        <br />
        调查人：
        <el-input v-model="reporter.submit"></el-input>
        审核人：
        <el-input v-model="reporter.review"></el-input>
        发往单位：
        <el-autocomplete
          v-model="reporter.sendTo"
          :fetch-suggestions="querySearch"
          placeholder="请输入内容"
          @select="handleSelect"
        ></el-autocomplete>
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="onSubmit">提 交</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
import { getData, logout, postJSON, putJSON } from "@/utils/http";
import { mapGetters } from "vuex";
import { URL_MAP } from "@/config/config";
import { generateID } from "@/utils/utils";
import FileUpload from "../utils/FileUpload.vue";
import Moment from "@/utils/moment.zh_cn";
export default {
  components: { FileUpload },
  name: "reporter",
  computed: {
    ...mapGetters([
      "userid",
      "token",
      "projectName",
      "reportName",
      "isProject",
      "isLogin",
      "username",
      "selectedTemp",
    ]),
  },

  data() {
    return {
      loading: false,
      visible1: false,
      visible2: false,
      visible3: false,
      visible4: false,
      visible5: false,
      visible6: false,
      visible7: false,
      visible8: false,
      visible9: false,
      sendToList: [
        {
          value: "省疾控中心",
        },
        {
          value: "市疾控中心",
        },
        {
          value: "县疾控中心",
        },
        {
          value: "省卫健委",
        },
        {
          value: "市卫健委",
        },
        {
          value: "县卫健委",
        },
      ],
      reporter: {
        title: "无",
        preface: "无",
        situation: "无",
        diagnosis: "无",
        conclusion1: "无",
        conclusion2: "无",
        conclusion3: "无",
        measures: "无",
        problem: "无",
        inscribe: "无",
        clif: "无",
        msg: "无",
        experiment: "无",
        analysis: "无",
        sendTo: "",
        submit: "",
        review: "",
        uri: [],
      },
    };
  },
  props: {
    rawData: Array,
  },
  watch: {
    rawData: function (v) {
      this.init();
    },
  },
  methods: {
    logout() {
      logout();
      this.$store.commit("logout");
      sessionStorage.clear();
      this.$router.push({
        path: "/login",
      });
    },
    goBack() {
      this.$router.go(-1);
    },
    init() {
      let toChinesNum = function (num) {
        let changeNum = [
            "一",
            "二",
            "三",
            "四",
            "五",
            "六",
            "七",
            "八",
            "九",
            "十",
          ],
          newNum = "",
          arr = num.toString().split("");
        arr[0] = parseInt(arr[0]) - 1;
        if (arr[0] == -1 && arr.length == 1) {
          return "零";
        }
        if (arr.length > 1) {
          arr[1] = parseInt(arr[1]) - 1;
          if (!arr[0]) {
            newNum =
              !arr[0] && arr[1] == -1
                ? changeNum[9]
                : changeNum[9] + changeNum[arr[1]];
          } else {
            newNum =
              changeNum[arr[0]] +
              changeNum[9] +
              (changeNum[arr[1]] ? changeNum[arr[1]] : "");
          }
        } else {
          newNum = changeNum[arr[0]];
        }
        return newNum;
      };
      let rawData = JSON.parse(JSON.stringify(this.rawData));
      rawData.sort((v1, v2) => {
        return (
          Moment(v1["发病日期"]).millisecond() -
          Moment(v2["发病日期"]).millisecond()
        );
      });
      let tempname = this.selectedTemp || "";
      let idx = tempname.indexOf("个案调查表");
      if (idx > 0) {
        tempname = tempname.slice(0, idx);
      }
      console.log(rawData[0]);
      this.reporter.title = `${Moment().year()}年${
        Moment().month() + 1
      }月${Moment().date()}日 ${tempname} 聚集性疫情流调报告`;
      // console.log(this.reporter.title)
      let es = ``;
      for (let i = 0; i < rawData.length; i++) {
        es += `病例${toChinesNum(i + 1)}${i === 0 ? "（首诊病例）" : ""}:
          ${rawData[i]["姓名"]}，${rawData[i]["性别"]}，年龄：${
          Moment().year() - Moment(rawData[i]["出生日期"]).year()
        }岁，家庭住址：${rawData[i]["家庭住址"]}。${rawData[i]["发病日期"]
          .replace("T", " ")
          .replace(".000Z", "")}出现${rawData[i]["发病症状"]}，体温${
          rawData[i]["体温"]
        }℃，${rawData[i]["初诊日期"].replace("T", " ").replace(".000Z", "")}于${
          rawData[i]["初诊单位"]
        }进行诊断，初步诊断结果为${rawData[i]["初步诊断"]}。
`;
      }
      this.reporter.diagnosis = es;
      this.reporter.situation = `本次疫情持续时间：${
        rawData[0]["发病日期"]
      } - ${rawData[rawData.length - 1]["发病日期"]}
发病人数：${this.rawData.length}`;

      this.reporter.analysis = `人群分布：男性：${
        rawData.filter((v) => v["性别"] === "男").length
      }人，女性：${rawData.filter((v) => v["性别"] === "女").length}人。
`;

    let ageList = this.ageList()
    console.log(ageList)
    ageList.forEach(k => {
      this.reporter.analysis += `年龄在${k.key}的有${k.value}人；`
    })

    },
    ageList() {
      let data = {}
      this.rawData.forEach(v => {
        let a = Moment().year() - Moment(v['出生日期']).year()
        a = `${a}岁`
        data[a] = data[a] || 1
        data[a] += 1
      })

      let p = []
      Object.keys(data).forEach(v => p.push(v))
      // console.log(p)
      
      p.sort((v1, v2) => parseInt(v1.slice(0, v1.length - 1)) - parseInt(v2.slice(0, v2.length - 1)) )
      let pp = []
      p.forEach(k => {
        pp.push( {
          key: k,
          value: data[k] - 1
        })
      })
      return pp
    },

    onSubmit() {
      this.loading = true;
      const report = {
        uuid: generateID(),
        values: this.reporter,
        metaDataName: "通用模板",
        msg: this.reporter.msg,
      };
      console.log(report);
      postJSON(URL_MAP.POST_LOG, report)
        .then(async (res) => {
          if (res.code === 0) {
            return await putJSON(URL_MAP.PROJECT_RECORD, {
              name: this.projectName,
              uuid: report.uuid,
            });
          } else {
            this.$message.error(res.msg);
            return null;
          }
        })
        .then(async (res) => {
          if (res.code === 0) {
            return await getData(URL_MAP.RECORD_TO_WORD, { uuid: report.uuid });
          } else {
            this.$message.error(res.msg);
          }
        })
        .then((res) => {
          console.log(res);
          this.$message.success("提交成功");
        })
        .catch((e) => {
          console.log(e);
          this.$message.error("提交失败");
        })
        .finally(() => {
          this.loading = false;
          // this.fetch()
        });
    },
    querySearch(queryString, cb) {
      let restaurants = this.sendToList;
      let results = queryString
        ? restaurants.filter(this.createFilter(queryString))
        : restaurants;
      // 调用 callback 返回建议列表的数据
      cb(results);
    },
    createFilter(queryString) {
      return (obj) => {
        return obj.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
      };
    },
  },

  mounted() {
    this.init();
  },
};
</script>

<style>
.hidden {
  display: none;
}
.show {
  display: block;
}
</style>